﻿using System;
using LarDosIdosos.Business.Model;
using LarDosIdosos.NewAcessaDados;
using MySql.Data.MySqlClient;

namespace LarDosIdosos.Business
{
    public class DBParceiro
    {
        private string _stringConnection;

        public DBParceiro(string stringConnnection)
        {
            _stringConnection = stringConnnection;
        }


        public Parceiro BuscaParceiro(int codigoParceiro)
        {
            string sql = "select * from parceiro where Codigo_Parceiro = " + codigoParceiro;
            AcessaDados conn = new AcessaDados(_stringConnection);
            try
            {
                conn.OpenConnection();
                var reader = conn.ExecuteDataReader(sql);
                if (reader.Read())
                {
                    return MontaParceiro(reader);
                }
                return null;
            }
            catch (Exception ex)
            {
                throw new Exception("Não foi possível consultar a unidade de medida", ex);
            }
            finally
            {
                conn.CloseConection();
            }
        }

        private Parceiro MontaParceiro(MySqlDataReader reader)
        {
            Parceiro parceiro = new Parceiro();
            parceiro.Codigo_Parceiro = Convert.ToInt32(reader["Codigo_Parceiro"]);
            parceiro.CPF_Parceiro = reader["CPF_Parceiro"].ToString();
            parceiro.Data_De_Nascimento_Parceiro = Convert.ToDateTime(reader["Data_de_Nascimento_Parceiro"]);
            parceiro.Email_Parceiro = reader["Email_Parceiro"].ToString();
            parceiro.Estado_Civil_Parceiro = BuscaEstadoCivil(Convert.ToInt32(reader["Estado_Civil_Codigo_Estado_Civil"]));
            parceiro.Funcionario_Parceiro = BuscaFuncionarioParceiro(Convert.ToInt32(reader["Funcionario_Codigo_Funcionario"]));
            parceiro.Nome_Da_Mae_Parceiro = reader["Nome_da_Mae_Parceiro"].ToString();
            parceiro.Nome_Do_Pai_Parceiro = reader["Nome_do_Pai_Parceiro"].ToString();
            parceiro.Nome_Parceiro = reader["Nome_Parceiro"].ToString();
            parceiro.RG_Parceiro = reader["RG_Parceiro"].ToString();
            return parceiro;
        }

        private Funcionario BuscaFuncionarioParceiro(int Codigo_Funcionario)
        {
            DBFuncionarios dbFuncionarios = new DBFuncionarios(_stringConnection);
            return dbFuncionarios.BuscaFuncionario(Codigo_Funcionario);
        }

        private EstadoCivil BuscaEstadoCivil(int Codigo_Estado_Civil)
        {
            DBEstadoCivil dbEstadoCivil = new DBEstadoCivil(_stringConnection);
            return dbEstadoCivil.BuscaEstadoCivil(Codigo_Estado_Civil);
        }

        public Parceiro BuscaParceiro(string sql)
        {
            AcessaDados conn = new AcessaDados(_stringConnection);
            try
            {
                conn.OpenConnection();
                var reader = conn.ExecuteDataReader(sql);
                if (reader.Read())
                {
                    return MontaParceiro(reader);
                }
                return null;
            }
            catch (Exception ex)
            {
                throw new Exception("Não foi possível consultar a unidade de medida", ex);
            }
            finally
            {
                conn.CloseConection();
            }
        }
    }
}
